/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package MODELOS;

import CONTROLES.Conexion;
import CONTROLES.ControlCliente;
import CONTROLES.ControlPlanInversion;
import UTILITARIOS.Fecha;
import UTILITARIOS.StringToDate;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author Administrador
 */
public class Cuenta {

    private int idCuenta;
    private int idSucursal;
    private Long numeroCuenta;
    private int idCliente;
    private int idPlan;
    private double porcentajeInteres;
    private double monto;
    private int idUsuario;
    private Date fechaApertura;
    private Date fechaCierre;
    private String estado;
    private String modoPago;
    private int idRecibo;
    private double codigoCuenta;    

    public Cuenta(){

    }

    public int getIdCuenta() {
        return idCuenta;
    }

    public void setIdCuenta(int idCuenta) {
        this.idCuenta = idCuenta;
    }
    public int getIdSucursal() {
        return idSucursal;
    }

    public void setIdSucursal(int idSucursal) {
        this.idSucursal = idSucursal;
    }

    public Sucursal getSucursal(){
        return new Sucursal().dameSucursal(this.getIdSucursal());

    }
    public Long getNumeroCuenta() {
        return numeroCuenta;
    }

    public void setNumeroCuenta(Long numeroCuenta) {
        this.numeroCuenta = numeroCuenta;
    }

    public int getIdPlan() {
        return idPlan;
    }

    public void setIdPlan(int idPlan) {
        this.idPlan = idPlan;
    }
    public PlanInversion getPlan(){
        PlanInversion plan = new ControlPlanInversion().damePlan(this.idPlan);
        return plan;
    }

    public int getIdCliente() {
        return idCliente;
    }

    public void setIdCliente(int idCliente) {
        this.idCliente = idCliente;
    }
    public double  getPorcentajeInteres() {
        return porcentajeInteres;
    }

    public void setPorcentajeInteres(double porcentajeInteres) {
        this.porcentajeInteres = porcentajeInteres;
    }

    public double getMonto(){
        return monto;
    }
    public void setMonto(double monto){
        this.monto = monto;
    }
    public Date getFechaApertura() {
        return fechaApertura;
    }

    public void setFechaApretura(Date fechaApertura) {
        this.fechaApertura = fechaApertura;
    }
    
    public String getEstado(){
        return this.estado;
    }

    public void setEstado(String estado){
        this.estado = estado;
    }

    public String getModoPago(){
        return this.modoPago;
    }

    public void setModoPago(String modo){
        this.modoPago = modo;
    }
    
    public int getIdUsuario(){
        return this.idUsuario;
    }

    public void setIdUsuario(int id_usuario) {
        this.idUsuario = id_usuario;
    }

    public Date getFechaCierre(){
        return this.fechaCierre;
    }

    public void setFechaFechaCierre(Date cierre) {
        this.fechaCierre = cierre;
    }

    public int getIdRecibo(){
        return this.idRecibo;
    }

    public void setIdRecibo(int id_recibo) {
        this.idRecibo = id_recibo;
    }

    public double getCodigoCuenta() {
        return codigoCuenta;
    }

    public void setCodigoCuenta(double codigoCuenta) {
        this.codigoCuenta = codigoCuenta;
    }

    public boolean facturaDisponible(){
        if(monto >= 3000)
            return true;
        else
            return false;
    }

    public Cliente getCliente(){
        Cliente cliente = new ControlCliente().dameCliente(this.getIdCliente());
        return cliente;
    }

    public ArrayList<Pago> getPagos(){
        Conexion conection = new Conexion();
        ArrayList<Pago> pagos = new ArrayList<Pago>();
        Pago c;
        try{
            Connection conectado = conection.getConexion();
            PreparedStatement psc = conectado.prepareStatement("select * from PAGOS where id_cuenta = '"+this.getIdCuenta()+"' ORDER BY fecha_pago ASC");
            ResultSet respEmp = psc.executeQuery();
            while (respEmp.next()){

                c= new Pago();
                c.setIdPago(respEmp.getInt(1));
                c.setFechaPago(respEmp.getDate(2));
                c.setMonto(respEmp.getDouble(3));
                c.setIdCuenta(respEmp.getInt(4));
                c.setIdUsuario(respEmp.getInt(5));
                c.setIdSucursal(respEmp.getInt(6));
                c.setEstado(respEmp.getString(7));
                c.setNumeroPago(respEmp.getInt(8));
                c.setIdRecibo(respEmp.getInt(9));
                c.setModoPago(respEmp.getString(10));

                pagos.add(c);
            }
        }catch (SQLException e){
            System.out.println("error al recuperar lista de Pagos " + e.getLocalizedMessage());
        }
        return pagos;   
    }

        public ArrayList<Pago> getPagosDisponibles(){
        Conexion conection = new Conexion();
        ArrayList<Pago> pagos = new ArrayList<Pago>();
        Pago c;
        StringToDate conv = new StringToDate();
        Date fecha = conv.convertir(new Fecha().getFecha());
        try{
            Connection conectado = conection.getConexion();
            PreparedStatement psc = conectado.prepareStatement("select * from PAGOS where id_cuenta = '"+this.getIdCuenta()+"' AND fecha_pago <= '"+fecha+"' AND estado = 'PENDIENTE' ORDER BY fecha_pago ASC");
            ResultSet respEmp = psc.executeQuery();
            while (respEmp.next()){
                c= new Pago();
                c.setIdPago(respEmp.getInt(1));
                c.setFechaPago(respEmp.getDate(2));
                c.setMonto(respEmp.getDouble(3));
                c.setIdCuenta(respEmp.getInt(4));
                c.setIdUsuario(respEmp.getInt(5));
                c.setIdSucursal(respEmp.getInt(6));
                c.setEstado(respEmp.getString(7));
                c.setNumeroPago(respEmp.getInt(8));
                c.setIdRecibo(respEmp.getInt(9));
                c.setModoPago(respEmp.getString(10));
                
                pagos.add(c);
            }
        }catch (SQLException e){
            System.out.println("error al recuperar lista de Pagos Disponibles " + e.getLocalizedMessage());
        }
        return pagos;
    }

    public double calcularMontoPago(){
        PlanInversion p = this.getPlan();
        return (this.getMonto()*(this.getPorcentajeInteres()/100)*p.getFrecuenciaPago());
    }
    public double calcularMontoPago1(){
        PlanInversion p = this.getPlan();
        return (this.getMonto()*(this.getCodigoCuenta()/100)*p.getFrecuenciaPago());
    }

    public ArrayList<Pago> getPagosPagados() {
        Conexion conection = new Conexion();
        ArrayList<Pago> pagos = new ArrayList<Pago>();
        Pago c;        
        try{
            Connection conectado = conection.getConexion();
            PreparedStatement psc = conectado.prepareStatement("select * from PAGOS where id_cuenta = '"+this.getIdCuenta()+"' AND estado = 'PAGADO' ORDER BY fecha_pago ASC");
            ResultSet respEmp = psc.executeQuery();
            while (respEmp.next()){
                c= new Pago();
                c.setIdPago(respEmp.getInt(1));
                c.setFechaPago(respEmp.getDate(2));
                c.setMonto(respEmp.getDouble(3));
                c.setIdCuenta(respEmp.getInt(4));
                c.setIdUsuario(respEmp.getInt(5));
                c.setIdSucursal(respEmp.getInt(6));
                c.setEstado(respEmp.getString(7));
                c.setNumeroPago(respEmp.getInt(8));
                c.setIdRecibo(respEmp.getInt(9));
                c.setModoPago(respEmp.getString(10));

                pagos.add(c);
            }
        }catch (SQLException e){
            System.out.println("error al recuperar lista de intereses pagados de la cuenta " + e.getLocalizedMessage());
        }
        return pagos;
    }
}